#ifndef __USART_H // 避免头文件被重复包含
#define __USART_H

#include <stdio.h> // 标准输入输出库
#include <stdarg.h> // 可变参数列表
#include "sys.h" // 系统相关定义

// 定义使用的串口，这里选择USART3
#define USART_n		USART1

// 定义各个USART接收缓冲区的最大长度
#define USART1_REC_LEN  256  // USART1接收缓冲区长度
#define USART2_REC_LEN  200  // USART2接收缓冲区长度
#define USART3_REC_LEN  200  // USART3接收缓冲区长度

// 定义USART接收使能状态
#define EN_USART1_RX 	1		// 使能USART1接收
#define EN_USART2_RX 	1		// 禁止USART2接收
#define EN_USART3_RX 	1		// 使能USART3接收

// 外部定义的USART接收缓冲区，注意最大长度由上面定义
extern u8  USART1_RX_BUF[USART1_REC_LEN]; // USART1接收缓冲区
//extern u8  USART2_RX_BUF[USART1_REC_LEN]; // USART2接收缓冲区
extern u8  USART3_RX_BUF[USART3_REC_LEN]; // USART3接收缓冲区

// 外部定义的USART接收状态标记，用于标识接收状态
extern u16 USART1_RX_STA; // USART1接收状态
//extern u16 USART2_RX_STA; // USART2接收状态
extern u16 USART3_RX_STA; // USART3接收状态

// USART发送格式化字符串的函数声明
void UsartPrintf(USART_TypeDef *USARTx, char *fmt,...);
// 无符号字符到有符号字符的转换函数
char UcToC(u8 data);

// 各个USART的初始化函数声明
void USART1_INIT(u32 bound); // USART1初始化
void USART2_INIT(u32 bound); // USART2初始化
void USART3_INIT(u32 bound); // USART3初始化，部分重映射

void Usart_SendByte( USART_TypeDef *pUSARTx, uint8_t ch);
// 向USART发送字符串的函数声明
//void Usart_SendString(USART_TypeDef *pUSARTx, u8 *str);
void Usart_SendString(USART_TypeDef *USARTx, unsigned char *str, unsigned short len);

#endif // 结束头文件定义
